package main

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	"lw-shop/user_service/proto"
)

var (
	// userClient 是 gRPC 客户端，用于调用远程 User 服务的方法
	userClient proto.UserClient
	// conn 是 gRPC 连接对象，管理客户端与服务器的连接
	conn *grpc.ClientConn
)

// Init 初始化 gRPC 客户端连接
func Init() {
	var err error
	// 建立 gRPC 连接，使用 `grpc.WithInsecure()` 允许不加密（非 TLS）连接
	conn, err = grpc.Dial("127.0.0.1:51458", grpc.WithInsecure())
	if err != nil {
		// 如果连接失败，则终止程序，并打印错误信息
		panic(err)
	}
	// 创建 User 服务的 gRPC 客户端实例
	userClient = proto.NewUserClient(conn)
}

// TestGetUserList 测试获取用户列表，并验证密码
func TestGetUserList() {
	// 调用 gRPC 服务的 GetUserList 方法，获取用户列表
	rsp, err := userClient.GetUserList(context.Background(), &proto.PageInfo{
		Pn:    1, // 分页参数：第 1 页
		PSize: 2, // 每页 2 条数据
	})
	if err != nil {
		// 如果调用失败，则终止程序，并打印错误信息
		panic(err)
	}

	// 遍历返回的用户数据
	for _, user := range rsp.Data {
		// 打印用户信息
		fmt.Println("手机号:", user.Mobile, "昵称:", user.NickName, "密码:", user.Password)

		// 调用 CheckPassword 方法，验证密码
		checkRsp, checkErr := userClient.CheckPassword(context.Background(), &proto.PasswordCheckInfo{
			Password:          "likaladi",    // 输入的明文密码
			EncryptedPassword: user.Password, // 从数据库获取的加密密码
		})
		if checkErr != nil {
			// 如果验证失败，则终止程序，并打印错误信息
			panic(checkErr)
		}

		// 打印密码验证结果
		fmt.Println("密码匹配结果:", checkRsp.Success)
	}
}

func TestGetUserByMobile() {
	rsp, err := userClient.GetUserByMobile(context.Background(), &proto.MobileRequest{
		Mobile: "18782222220",
	})
	if err != nil {
		// 如果调用失败，则终止程序，并打印错误信息
		panic(err)
	}
	fmt.Println("手机号:", rsp.Mobile, "昵称:", rsp.NickName, "密码:", rsp.Password, "生日：", rsp.Birthday)
}

// main 函数是程序的入口
func main() {
	// 初始化 gRPC 客户端连接
	Init()

	// 测试获取用户列表
	//TestGetUserList()

	TestGetUserByMobile()

	// 关闭 gRPC 连接，释放资源
	conn.Close()
}
